using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;

using UMEVOR.DTO;

using Microsoft.Practices.EnterpriseLibrary.Data;

namespace UMEVOR.DAL
{
    public class DALT_EQUIPE_INSTITUICAO : DALConnection
    {

        #region Incluir

        public void incluir(T_EQUIPE_INSTITUICAO obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" INSERT INTO T_EQUIPE_INSTITUICAO ");
                SQL.Append("    (ID_CASA_ESPIRITA, TX_FUNCIONARIO, ID_CARGO, TX_URL_FOTO) ");
                SQL.Append(" VALUES ");
                SQL.Append("    (" + obj.ID_CASA_ESPIRITA.ToString() + ",'" + obj.TX_FUNCIONARIO + "'," + obj.ID_CARGO.ToString() + ", '" + obj.TX_URL_FOTO.Replace("\\", "#") + "') ");

                DbCommand insertT_EQUIPE_INSTITUICAO = database.GetSqlStringCommand(SQL.ToString());

                insertT_EQUIPE_INSTITUICAO.CommandText = SQL.ToString();

                database.ExecuteNonQuery(insertT_EQUIPE_INSTITUICAO, DALConnection.transaction);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Incluir[]

        public void incluir(T_EQUIPE_INSTITUICAO[] obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();
                DbCommand[] insertT_EQUIPE_INSTITUICAO = new DbCommand[obj.Length];

                for (int index = 0; index < obj.Length; index++)
                {
                    T_EQUIPE_INSTITUICAO o = obj[index];
                    SQL = new StringBuilder();

                    SQL.Append(" INSERT INTO T_EQUIPE_INSTITUICAO ");
                    SQL.Append("    (ID_EQUIPE_INST, ID_CASA_ESPIRITA, TX_FUNCIONARIO, ID_CARGO, TX_URL_FOTO) ");
                    SQL.Append(" VALUES ");
                    SQL.Append("    (:ID_EQUIPE_INST, :ID_CASA_ESPIRITA, :TX_FUNCIONARIO, :ID_CARGO, :TX_URL_FOTO) ");

                    insertT_EQUIPE_INSTITUICAO[index] = database.GetSqlStringCommand(SQL.ToString());

                    database.AddInParameter(insertT_EQUIPE_INSTITUICAO[index], ":ID_EQUIPE_INST", DbType.Int64, o.ID_EQUIPE_INST);
                    database.AddInParameter(insertT_EQUIPE_INSTITUICAO[index], ":ID_CASA_ESPIRITA", DbType.Int64, o.ID_CASA_ESPIRITA);
                    database.AddInParameter(insertT_EQUIPE_INSTITUICAO[index], ":TX_FUNCIONARIO", DbType.String, o.TX_FUNCIONARIO);
                    database.AddInParameter(insertT_EQUIPE_INSTITUICAO[index], ":ID_CARGO", DbType.Int64, o.ID_CARGO);
                    database.AddInParameter(insertT_EQUIPE_INSTITUICAO[index], ":TX_URL_FOTO", DbType.String, o.TX_URL_FOTO);

                    insertT_EQUIPE_INSTITUICAO[index].CommandText = SQL.ToString();
                }

                try
                {
                    foreach (DbCommand cmd in insertT_EQUIPE_INSTITUICAO)
                    {
                        database.ExecuteNonQuery(cmd, DALConnection.transaction);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Alterar

        public void alterar(T_EQUIPE_INSTITUICAO obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" UPDATE T_EQUIPE_INSTITUICAO SET ");
                SQL.Append("    ID_CASA_ESPIRITA = " + obj.ID_CASA_ESPIRITA.ToString() + " , ");
                SQL.Append("    TX_FUNCIONARIO = '" + obj.TX_FUNCIONARIO + "' , ");
                SQL.Append("    ID_CARGO = " + obj.ID_CARGO.ToString() + " , ");
                SQL.Append("    TX_URL_FOTO = '" + obj.TX_URL_FOTO.Replace("\\", "#") + "' ");
                SQL.Append(" WHERE ");
                SQL.Append("     ID_EQUIPE_INST = " + obj.ID_EQUIPE_INST.ToString());

                DbCommand updateT_EQUIPE_INSTITUICAO = database.GetSqlStringCommand(SQL.ToString());
                updateT_EQUIPE_INSTITUICAO.CommandText = SQL.ToString();

                database.ExecuteNonQuery(updateT_EQUIPE_INSTITUICAO, DALConnection.transaction);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Alterar[]

        public void alterar(T_EQUIPE_INSTITUICAO[] obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();
                DbCommand[] updateT_EQUIPE_INSTITUICAO = new DbCommand[obj.Length];

                for (int index = 0; index < obj.Length; index++)
                {
                    T_EQUIPE_INSTITUICAO o = obj[index];
                    SQL = new StringBuilder();
                    SQL.Append(" UPDATE T_EQUIPE_INSTITUICAO SET ");
                    SQL.Append("    ID_CASA_ESPIRITA = :ID_CASA_ESPIRITA , ");
                    SQL.Append("    TX_FUNCIONARIO = :TX_FUNCIONARIO , ");
                    SQL.Append("    ID_CARGO = :ID_CARGO , ");
                    SQL.Append("    TX_URL_FOTO = :TX_URL_FOTO ");
                    SQL.Append(" WHERE ");
                    SQL.Append("     ID_EQUIPE_INST = :ID_EQUIPE_INST  ");

                    updateT_EQUIPE_INSTITUICAO[index] = database.GetSqlStringCommand(SQL.ToString());

                    database.AddInParameter(updateT_EQUIPE_INSTITUICAO[index], ":ID_EQUIPE_INST", DbType.Int64, o.ID_EQUIPE_INST);
                    database.AddInParameter(updateT_EQUIPE_INSTITUICAO[index], ":ID_CASA_ESPIRITA", DbType.Int64, o.ID_CASA_ESPIRITA);
                    database.AddInParameter(updateT_EQUIPE_INSTITUICAO[index], ":TX_FUNCIONARIO", DbType.String, o.TX_FUNCIONARIO);
                    database.AddInParameter(updateT_EQUIPE_INSTITUICAO[index], ":FL_CARGO", DbType.Int64, o.ID_CARGO);
                    database.AddInParameter(updateT_EQUIPE_INSTITUICAO[index], ":TX_URL_FOTO", DbType.String, o.TX_URL_FOTO);

                    updateT_EQUIPE_INSTITUICAO[index].CommandText = SQL.ToString();
                }

                try
                {
                    foreach (DbCommand cmd in updateT_EQUIPE_INSTITUICAO)
                    {
                        database.ExecuteNonQuery(cmd, DALConnection.transaction);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Excluir

        public void excluir(T_EQUIPE_INSTITUICAO obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" DELETE FROM T_EQUIPE_INSTITUICAO ");
                SQL.Append(" WHERE ");
                SQL.Append("     ID_EQUIPE_INST = " + obj.ID_EQUIPE_INST.ToString());

                DbCommand deleteT_EQUIPE_INSTITUICAO = database.GetSqlStringCommand(SQL.ToString());

                deleteT_EQUIPE_INSTITUICAO.CommandText = SQL.ToString();

                database.ExecuteNonQuery(deleteT_EQUIPE_INSTITUICAO, DALConnection.transaction);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Excluir[]

        public void excluir(T_EQUIPE_INSTITUICAO[] obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();
                DbCommand[] deleteT_EQUIPE_INSTITUICAO = new DbCommand[obj.Length];

                for (int index = 0; index < obj.Length; index++)
                {
                    T_EQUIPE_INSTITUICAO o = obj[index];
                    SQL = new StringBuilder();
                    SQL.Append(" DELETE FROM T_EQUIPE_INSTITUICAO ");
                    SQL.Append(" WHERE ");
                    SQL.Append("     ID_EQUIPE_INST = :ID_EQUIPE_INST  ");

                    deleteT_EQUIPE_INSTITUICAO[index] = database.GetSqlStringCommand(SQL.ToString());

                    database.AddInParameter(deleteT_EQUIPE_INSTITUICAO[index], ":ID_EQUIPE_INST", DbType.Int64, o.ID_EQUIPE_INST);

                    deleteT_EQUIPE_INSTITUICAO[index].CommandText = SQL.ToString();
                }

                try
                {
                    foreach (DbCommand cmd in deleteT_EQUIPE_INSTITUICAO)
                    {
                        database.ExecuteNonQuery(cmd, DALConnection.transaction);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region ObterPorPK

        public T_EQUIPE_INSTITUICAO obterPorPK(long pID_EQUIPE_INST)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" SELECT * FROM T_EQUIPE_INSTITUICAO ");
                SQL.Append(" WHERE ");
                SQL.Append("  ID_EQUIPE_INST = " + pID_EQUIPE_INST.ToString());

                DbCommand consultaT_EQUIPE_INSTITUICAO = database.GetSqlStringCommand(SQL.ToString());
                consultaT_EQUIPE_INSTITUICAO.CommandText = SQL.ToString();

                IDataReader reader = database.ExecuteReader(consultaT_EQUIPE_INSTITUICAO, DALConnection.transaction);
                T_EQUIPE_INSTITUICAO obj = null;

                if (reader.Read())
                {
                    obj = new T_EQUIPE_INSTITUICAO();
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_EQUIPE_INST")))
                    {
                        obj.ID_EQUIPE_INST = Int64.Parse(reader["ID_EQUIPE_INST"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_CASA_ESPIRITA")))
                    {
                        obj.ID_CASA_ESPIRITA = Int64.Parse(reader["ID_CASA_ESPIRITA"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_FUNCIONARIO")))
                    {
                        obj.TX_FUNCIONARIO = reader["TX_FUNCIONARIO"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_CARGO")))
                    {
                        obj.ID_CARGO = Int32.Parse(reader["ID_CARGO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_URL_FOTO")))
                    {
                        obj.TX_URL_FOTO = reader["TX_URL_FOTO"].ToString().Replace("#","\\");
                    }
                }
                reader.Dispose();
                consultaT_EQUIPE_INSTITUICAO.Dispose();

                return obj;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region ListarTodos

        public List<T_EQUIPE_INSTITUICAO> listarTodos()
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" SELECT * FROM T_EQUIPE_INSTITUICAO ORDER BY TX_FUNCIONARIO");

                DbCommand consultaT_EQUIPE_INSTITUICAO = database.GetSqlStringCommand(SQL.ToString());
                consultaT_EQUIPE_INSTITUICAO.CommandText = SQL.ToString();

                IDataReader reader = database.ExecuteReader(consultaT_EQUIPE_INSTITUICAO, DALConnection.transaction);
                List<T_EQUIPE_INSTITUICAO> lista = new List<T_EQUIPE_INSTITUICAO>();
                T_EQUIPE_INSTITUICAO obj = null;

                while (reader.Read())
                {
                    obj = new T_EQUIPE_INSTITUICAO();
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_EQUIPE_INST")))
                    {
                        obj.ID_EQUIPE_INST = Int64.Parse(reader["ID_EQUIPE_INST"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_CASA_ESPIRITA")))
                    {
                        obj.ID_CASA_ESPIRITA = Int64.Parse(reader["ID_CASA_ESPIRITA"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_FUNCIONARIO")))
                    {
                        obj.TX_FUNCIONARIO = reader["TX_FUNCIONARIO"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("FL_CARGO")))
                    {
                        obj.ID_CARGO = Int32.Parse(reader["ID_CARGO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_URL_FOTO")))
                    {
                        obj.TX_URL_FOTO = reader["TX_URL_FOTO"].ToString();
                    }
                    lista.Add(obj);
                }
                reader.Dispose();
                consultaT_EQUIPE_INSTITUICAO.Dispose();

                return lista;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public List<VOT_EQUIPE_INSTITUICAO> consultar(string funcionario, int idCasaEspirita)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" SELECT E.ID_EQUIPE_INST AS ID_EQUIPE_INST, E.ID_CASA_ESPIRITA AS ID_CASA_ESPIRITA, A.TX_DSC_CARGO AS TX_CARGO, E.TX_FUNCIONARIO AS ");
                SQL.Append(" TX_FUNCIONARIO, E.ID_CARGO AS ID_CARGO, E.TX_URL_FOTO AS TX_URL_FOTO, C.TX_NOME_INSTITUICAO AS NOME_INSTITUICAO, A.ID_CARGO AS ID_CARGO ");
                SQL.Append(" FROM T_EQUIPE_INSTITUICAO E, T_CASA_ESPIRITA C, T_CARGO A WHERE E.ID_CASA_ESPIRITA = C.ID_CASA_ESPIRITA AND E.ID_CARGO = A.ID_CARGO AND");
                SQL.Append(" E.TX_FUNCIONARIO LIKE '" + funcionario + "%'");


                if (!idCasaEspirita.Equals(0))
                    SQL.Append(" AND E.ID_CASA_ESPIRITA = " + idCasaEspirita.ToString());

                SQL.Append(" ORDER BY C.TX_NOME_INSTITUICAO, E.TX_FUNCIONARIO");

                DbCommand consultaT_EQUIPE_INSTITUICAO = database.GetSqlStringCommand(SQL.ToString());
                consultaT_EQUIPE_INSTITUICAO.CommandText = SQL.ToString();

                IDataReader reader = database.ExecuteReader(consultaT_EQUIPE_INSTITUICAO, DALConnection.transaction);
                List<VOT_EQUIPE_INSTITUICAO> lista = new List<VOT_EQUIPE_INSTITUICAO>();
                VOT_EQUIPE_INSTITUICAO obj = null;

                while (reader.Read())
                {
                    obj = new VOT_EQUIPE_INSTITUICAO();
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_EQUIPE_INST")))
                    {
                        obj.ID_EQUIPE_INST = Int64.Parse(reader["ID_EQUIPE_INST"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_CARGO")))
                    {
                        obj.ID_CARGO = Int32.Parse(reader["ID_CARGO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_CASA_ESPIRITA")))
                    {
                        obj.ID_CASA_ESPIRITA = Int64.Parse(reader["ID_CASA_ESPIRITA"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_FUNCIONARIO")))
                    {
                        obj.TX_FUNCIONARIO = reader["TX_FUNCIONARIO"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_CARGO")))
                    {
                        obj.TX_CARGO = reader["TX_CARGO"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_URL_FOTO")))
                    {
                        obj.TX_URL_FOTO = reader["TX_URL_FOTO"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("NOME_INSTITUICAO")))
                    {
                        obj.TX_CASA_ESPIRITA = reader["NOME_INSTITUICAO"].ToString();
                    }

                    lista.Add(obj);

                }
                reader.Dispose();
                consultaT_EQUIPE_INSTITUICAO.Dispose();

                return lista;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion        
    }
}

